/**
* \file NetworkPlugin.h
* \brief NetworkPlugin decleration class
* \author Edouard ROGE
* \date 29 Octobre 2013
*/
#ifndef _NETWORKPLUGIN_WIN32_
#define _NETWORKPLUGIN_WIN32_

#include <string>
#include "Network.h"
#include "Core/Memory/HeapObject.h"
#include "Core/Network/INetworkPlugin.h"

class Core::Network::INetworkContext;

class NetworkPlugin : public Core::Network::INetworkPlugin
{
public:

	/**
	* \fn NetworkPlugin();
	* \brief Default contructor
	*/
	NetworkPlugin();

	/**
	* \fn virtual ~NetworkPlugin();
	* \brief Destructor
	*/
	virtual ~NetworkPlugin();

	/**
	* \fn const String & GetName() const;
	* \return Plug-in name
	* \brief Get the name of the plug-in
	*/
	NETWORK_WIN32 virtual const std::string & GetName() const;

	/**
	* \fn virtual NetworkContext * CreateContext() const;
	* \return a newly created network context
	* \brief Create a network context
	*/
	NETWORK_WIN32 virtual Core::Network::INetworkContext * CreateContext() const;

	/**
	* \fn virtual void DestroyContext(NetworkContext * _pRenderContext) const;
	* \param _pContext Network context to destroy
	* \brief Destroy the context in parameter, created before by this plugin
	*/
	NETWORK_WIN32 virtual void DestroyContext(Core::Network::INetworkContext * _pContext) const;

};

EXPORT_PLUGIN(NetworkPlugin)

#endif // _NETWORKPLUGIN_WIN32_
